# 导包
import unittest
from api.login666 import LoginAPI
import random
import requests

"""
+ 接口对于cookies数据的依赖处理：
  ++ 使用cookies进行手动传递参数，在需要使用cookies的每一个请求中设置 cookies=xxx
  ++ 使用session自动保存cookies数据进行传递
     +++ 1.创建session对象（注意：代码在测试用例侧进行编写）
     +++ 2.使用session对象发送请求（注意：代码在api侧进行编写）
     +++ 3.关闭session对象（注意：代码在测试用例侧进行编写）
     + 常见的问题：在测试用例多个方法中如何确保使用同一个session对象进行数据的自动保存与传参
       ++ 创建session对象，是在类级别的前置处理中创建（@classmethod）
       ++ 关闭session对象，是在类级别的后置处理中关闭
     + unittest代码执行顺序：
       + 类级别的前置处理 只会执行 1次
       + 方法级别的前置处理 会在每1个测试方法代码运行前 运行1次
       + 测试方法1
       + 测试方法2
       + 测试方法...
       + 方法级别的后置处理 会在每1个测试方法代码运行后 运行1次
       + 类级别的后置处理 只会执行 1次
"""


# 创建测试类
class TestLoginAPI(unittest.TestCase):
    # 类前置处理
    @classmethod
    def setUpClass(cls) -> None:
        # 我是类方法前置
        print("*" * 80)
        # 实例化session对象
        cls.session = requests.session()

    # 类后置处理
    @classmethod
    def tearDownClass(cls) -> None:
        # 我是类方法前置
        print("*" * 20)
        # 关闭session对象
        cls.session.close()

    # 前置处理
    def setUp(self) -> None:
        # 打印标识
        print("方法前置处理 ===》")
        # 实例化接口
        self.login_api = LoginAPI()

    # 后置处理
    def tearDown(self) -> None:
        # 打印标识
        print("《====方法后置处理")

    # 获取图片验证码成功
    def test01_get_verify_code(self):
        # 产生一个0到1之间的随机数
        response = self.login_api.get_verify_code(session=self.session, r=random.random())

        # print(response.text)
        print(response.status_code)

        # 断言响应状态码为200
        self.assertEqual(200, response.status_code)

    def test02_get_phone_code(self):
        test_data = {
            "phone": "13815721001",
            "imgVerifyCode": "8888",
            "type": "reg"
        }
        response = self.login_api.get_phone_code(phone_data=test_data, session=self.session)
        print(response.text)

